package momo.multitree.algo;

import momo.multitree.structure.*;
import junit.framework.TestCase;


public class PrimMinSpanTreeTest extends TestCase {

	protected void setUp() throws Exception {
		super.setUp();
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	public void testMstCostTree() {
		Node a = new Node("0", 0.125, 1);
		Node b = new Node("1", 0.125, 1);
		Node c = new Node("2", 0.125, 1);
		Node d = new Node("3", 0.125, 1);
		Node e = new Node("4", 0.125, 1);
		Node f = new Node("5", 0.125, 1);
		Node g = new Node("6", 0.125, 1);
		Node h = new Node("7", 0.125, 1);
		
		Edge ab = new Edge("0", a, b, 4, 4, 1, 1);
		Edge bc = new Edge("1", b, c, 3, 3, 1, 1);
		Edge ag = new Edge("2", a, g, 5, 5, 1, 1);
		Edge bd = new Edge("3", b, d, 2, 2, 1, 1);
		Edge ch = new Edge("4", c, h, 4, 4, 1, 1);
		Edge de = new Edge("5", d, e, 1, 1, 1, 1);
		Edge df = new Edge("6", d, f, 1, 1, 1, 1);
		Edge ef = new Edge("7", e, f, 1, 1, 1, 1);
		Edge eg = new Edge("8", e, g, 2, 2, 1, 1);
		Edge fh = new Edge("9", f, h, 2, 2, 1, 1);
		Edge gh = new Edge("10", g, h, 1, 1, 1, 1);
		
		Graph gr = new Graph();
		gr.add(a);
		gr.add(b);
		gr.add(c);
		gr.add(d);
		gr.add(e);
		gr.add(f);
		gr.add(g);
		gr.add(h);
		gr.add(ab);
		gr.add(bc);
		gr.add(ag);
		gr.add(bd);
		gr.add(ch);
		gr.add(de);
		gr.add(df);
		gr.add(ef);
		gr.add(eg);
		gr.add(fh);
		gr.add(gh);
		
		Tree t = new PrimMinSpanTree().mstCostTree(gr, a);
		
		
		
		assertEquals(7, t.getNoOfEdges());
		assertEquals(8, t.getNoOfNodes());
		
		assertTrue(t.getEdges().contains(ab));
		assertTrue(t.getEdges().contains(bc));
		assertTrue(t.getEdges().contains(bd));
		assertTrue(t.getEdges().contains(de));
		assertTrue(t.getEdges().contains(df));
		assertTrue(t.getEdges().contains(eg));
		assertTrue(t.getEdges().contains(gh));
		

		
	}

}
